﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
/*
 * 0626_Unity渲染 笔记本 Unity中的CommandBuffer https://www.jianshu.com/p/aa9f31e2e345
 * 
 * 上一篇讲了Unity中的RenderTexture,提到了FrameBuffer,https://www.jianshu.com/p/fa73c0f6762d
 * unity中可以通过FrameDebugger来查看FrameBuffer的内容,
 * CommandBuffer通过字面意思 就是一条命令 ,unity提供给开发者的一个自定义的渲染命令,
 * 依赖相机,用来拓展渲染管线的渲染效果,
 * 我们可以根据参数指定CommandBuffer在绿色的点上添加执行命令:
 * 
 * 
 * Camera调用AddCommandBuffer来把指定的指令塞到自己的渲染步骤中,
 * 需要注意多Camera下CommandBuffer的绑定.
 * 
 * 本例子中，渲染顺序如demo01_image01所示
 * 打开FrameDebuger可以看到,根据CameraEvent的设置,
 * 插入的commandBuffer设置在BeforeForwardOpaque,
 * 所以绿色渲染完成后被clear成黑色,然后红色cube最后渲染,
 * 
 */
namespace Example02_Demo01
{
	public class Demo01 : MonoBehaviour
	{
		CommandBuffer m_commandBuffer;
		public Material mat_green;
		public GameObject redCube;

		private void OnEnable()
		{
			m_commandBuffer = new CommandBuffer();
			m_commandBuffer.name = "GreenCube";

			Renderer _renderer = redCube.GetComponent<Renderer>();
			
			//1.使用绿色的材质，来绘制RedCube
			m_commandBuffer.DrawRenderer(_renderer, mat_green);

			//2.Clear 黑色
			m_commandBuffer.ClearRenderTarget(true, true, Color.black);

			//3.CommandBuffer添加的时机
			Camera.main.AddCommandBuffer(CameraEvent.BeforeForwardOpaque, m_commandBuffer);

		}
	}
}
